<?php
declare (strict_types = 1);

namespace app\admin\controller;

use app\admin\model\User;
use think\facade\Db;
use think\facade\Session;
use think\facade\View;
use think\Request;
use think\facade\Log;

class Login
{
    /**
     * admin应用
     * 展示登录表单
     */
    public function login(){

        # 临时关闭模版布局
        View::config(['layout_on' => false]);
        return View::fetch('admin/login');
        // 渲染模版
//        return View::fetch();
        // 指定访问的目录视图
//        return View::fetch('test/login');
    }

    /**
     * admin应用注册方法
     */
    public function register(){
        // 渲染模版
        # 临时关闭模版布局
        View::config(['layout_on' => false]);
        return View::fetch('/admin/register');
    }

    /**
     * @param Request $request
     * @return int
     */
    public function doLogin(Request $request){

        # tp框架接收参数
//        方式一
//         $username = $request->param('username');
         // 请求方式 post
//        $username = $request->post('username');

        # 通过助手函数接值
//        $username = \request()->post('username');
//        $username = input('username');
        # 静态调用
//        $username = \think\facade\Request::post('username');

        $username = input('username');// 接指定某个键值
        $password = input('password');
        # 验证参数、查询数据

        # 验证验证码
        $captcha = $request->post('captcha');
        if (!captcha_check($captcha)) {
            return  json(['data' =>[],'msg' =>'验证码不正确','code' => 2002]);
        }

        # 没有验证器之前、最简单验证
        # json_encode php 的内置函数
        # json php tp框架封装助手函数
        if (empty($username)) {
            return  json(['data' =>[],'msg' =>'用户名不能为空','code' => 2002]);
        }

        if (empty($password)) {
            return  json(['data' =>[],'msg' =>'密码不能为空','code' => 2002]);
        }

        # 自己尝试一下tp框架的验证器

        # 查询数据库、操作数据库之前、干什么事情、需要配置数据连接
        # 测试数据库是否连接成功
//        dd(\app\admin\model\Admin::find(1));


        # 真正使用
        # 根据用户名查询信息 、方法一
//        $userInfo = User::where('username',$username)->find();//不存在返回的是null、存在返回的是数据集合
//        if ($userInfo == null) {
//            return  json(['data' =>[],'msg' =>'用户名不存在','code' => 2002]);
//        }
//        if ($userInfo->password != md5($password)) {
//            return  json(['data' =>[],'msg' =>'密码不正确','code' => 2002]);
//        }

//        方法二
        $userInfo = User::where('username',$username)->findOrEmpty();// 不存在返回的是空对象、存在返回的是数据集合
        if ($userInfo->isEmpty()) {
            return  json(['data' =>[],'msg' =>'用户名不存在','code' => 2002]);
        }

        # 调用公共加密函数进行加密
        if ($userInfo->password != encrypt_password($password)) {
            return  json(['data' =>[],'msg' =>'密码不正确','code' => 2002]);
        }

        # 维护一下最后登录时间
        Db::name('user')->save(['id' => $userInfo->id,'last_login_time'=>time(),'update_time' => time()]);

        # 登录出成功

        # 需要记录用户信息
        Session::set('username',$userInfo->username);

        # 创建中间件
//        php think make:middleware admin@Login

        # 记录登录成功日志
        Log::info($userInfo->username."登录成功、IP：".\request()->ip());

        return  json(['data' =>[],'msg' =>'ok','code' => 200]);
        # 测试ajax是否请求成功
        return 1;
    }

    /**
     * 注册的时候、密码也需要加密
     */
    public function doRegister(){

        # 测试密码加密函数

//        $password = encrypt_password(123456);
//        echo $password;die();
        $client_password = \request()->get('password');// 客户端传送过来
        # 验证密码
        $password = 'fa7f216d90230993a1bf036fc994f621';//数据库的密码
        if ($password == encrypt_password($client_password)) {
            echo "密码相等";
        } else {
            echo "密码不对";
        }
        die();

        # 参数验证通过之后

        # 加密保存入库
        $password = encrypt_password(\request()->post('password'));
    }


    /**
     * 退出
     */
    public function logout(){
        # 清空session信息
        Session::delete('username');
        return redirect('/admin/login');
    }

}
